在說明各資料庫的SQL語法前,還是必須先來談談各資料庫提供的欄位型態,關聯式資料庫儲存資料時會將資料存放在Table中,Talbe再新增多個欄位,而每個欄位都會再依資料的內容分為多個不同的類型,而所謂資料類型是指定物件所能保留之資料類型的屬性。
類型包括整數、精確位數、浮點數、字元、貨幣資料、日期和時間資料、二進位字串等。一般分為四大類,不同的資料庫程式多少都會有點差異,而且版本升級時可能也會變更,以下僅列出較常使用的類型供參考。
數值型態有 integer, float, money 使用數值資料能夠搭配內建的數值函數來做資料處理該數值欄位。
儲存字元或符號之資料型別。
記錄日期/時間的資料型別,類型 Date, Time, Timestamp。
True、False, Yes、No, 1、0
以下就表列出 MS-SQL 的常用資料類型及每個型態的描述說明,不同的資料庫會有些許的差異,希望能幫助您更容易理解不同資料庫的欄位資料類型差異。
MS SQL Server 常用資料類型
字串(元)資料 (Character & Strings Data):
資料類型 | 描述 |
---|---|
char(n) | 固定長度的字串。最多 4,000 個字元。 |
varchar(n) | 可變長度的字串。最多 4,000 個字元。 |
varchar(max) | 可變長度的字串。最多 1,073,741,824 個字元。 |
text | 可變長度的字串。最多 2GB 字元資料。 |
Unicode 字串:
資料類型 | 描述 |
---|---|
nchar(n) | 固定長度的 Unicode 資料。最多 4,000 個字元。 |
nvarchar(n) | 可變長度的 Unicode 數據。最多 4,000 個字元。 |
nvarchar(max) | 可變長度的 Unicode 數據。最多 536,870,912 個字元。 |
ntext | 可變長度的 Unicode 數據。最多 2GB 字元資料。 |
Number 類型:
資料類型 | 描述 | 存儲 |
---|---|---|
smallint | 允許從 -32,768 到 32,767 的所有數字。 | 2 位元組 |
int | 允許從 -2,147,483,648 到 2,147,483,647 的所有數字。 | 4 位元組 |
bigint | 允許介於 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間的所有數字。 | 8 位元組 |
decimal(p,s) | 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 間的數字。p 參數指示可以存儲的最大位元數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位元數。s 必須是 0 到 p 之間的值。默認是 0。 | 5-17 位元 |
float(n) | 從 -1.79E + 308 到 1.79E + 308 的浮動精度數位資料。 | 4 位元組還是 8 位元組。 |
Date 類型:
資料類型 | 描述 | 存儲 |
---|---|---|
datetime | 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 3.33 毫秒。 | 8 bytes |
datetime2 | 從 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度為 100 納秒。 | 6-8 bytes |
smalldatetime | 從 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度為 1 分鐘。 | 4 bytes |
date | 僅存儲日期。從 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 | 3 bytes |
time | 僅存儲時間。精度為 100 納秒。 | 3-5 bytes |
Binary 類型:
資料類型 | 描述 |
---|---|
varbinary(n) | 可變長度的二進位資料。最多 8,000 位元組。 |
varbinary(max) | 可變長度的二進位資料。最多 2GB 位元組。 |
image | 可變長度的二進位資料。最多 2GB。 |
MySQL(MariaDB) 常用資料類型
字串(元)資料 (Character & Strings Data):
資料類型 | 描述 |
---|---|
char(n) | 固定長度的字串。最多 255 個字元。 |
varchar(n) | 可變長度的字串。最多 65,535 個字元。 |
Text | 可變長度的字串。最多 2^16 - 1 字元資料。 |
Unicode 字串:
資料類型 | 描述 |
---|---|
nchar(n) | 固定長度的 Unicode 資料。同char(n) CHARSET utf8。 |
nvarchar(n) | 可變長度的 Unicode 數據。同varchar(n) CHARSET utf8。 |
ntext | 可變長度的 Unicode 數據。同text CHARSET utf8。 |
Number 類型:
資料類型 | 描述 | 存儲 |
---|---|---|
smallint | 允許從 -32,768 到 32,767 的所有數字。 | 2 位元組 |
int | 允許從 -2,147,483,648 到 2,147,483,647 的所有數字。 | 4 位元組 |
decimal(p,s) | 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 間的數字。p 參數指示可以存儲的最大位元數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位元數。s 必須是 0 到 p 之間的值。默認是 0。 | 5-17 位元組 |
numeric(p,s) | 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 間的數字。p 參數指示可以存儲的最大位元數(小數點左側和右側)。p 必須是 1 到 38 之間的值。默認是 18。s 參數指示小數點右側存儲的最大位元數。s 必須是 0 到 p 之間的值。默認是 0。 | 5-17 位元組 |
float(n) | 從 -1.79E + 308 到 1.79E + 308 的浮動精度數位資料。 參數 n 指示該欄位保存 4 位元組還是 8 位元組。float(24) 保存 4 位元組,而 float(53) 保存 8 位元組。n 的預設值是 53。 | 4 或 8 位元組 |
real | 從 -3.40E + 38 到 3.40E + 38 的浮動精度數位資料。 | 4 位元組 |
Date 類型:
資料類型 | 描述 | 存儲 |
---|---|---|
datetime | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。 | 8 bytes |
date | 僅存儲日期。從 1000 年 1 月 1 日 到 9999 年 12 月 31 日。 | 3 bytes |
time | 僅存儲時間。精度為 100 納秒。 | 3-5 bytes |
timestamp | 1970-01-01 00:00:00 ~ 2037-12-31 23:59:59 | 4 bytes |
Binary 類型:
資料類型 | 描述 |
---|---|
TINYBLOB | 255 bytes。 |
BLOB | 65535 bytes。 |
LONGBLOB | 4,294,967,295 bytes。 |
上面詳細列出了各資料庫的資料型別,事實上,大部份的資料型別都差異不大,除非有特別的原因,否則不建議在資料庫存入大型資料,那一定會影響資料庫的效能。一般都是存該大型檔案(如圖片或word檔等)的路徑即可。如果是一般企業內部使用的系統,如ERP、CRM或官網的一些動態資料,一般都只會使用通用的字串、數字、日期等型別。那本文所介紹的幾個資料庫應該都足夠使用,特別是依目前的硬體成本大幅下滑,早期為了節省硬碟空間,會設定一些較不佔空間的資料型別,事實上現在看來意義不大。使用一般通用的型別,不論是資料庫轉換或是程式開發工具的變更,都比較不會發生問題,所以不必為了節省有限的空間,特別去使用特殊的型別。